import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import router from '@/router'
import { resetRouter } from '@/router'


const service = axios.create({
  // 如果执行 npm run dev  值为  'http://ihrm-java.itheima.net/api'
  baseURL: process.env.VUE_APP_BASE_API, // 设置axios请求的基础的基础地址
  timeout: 5000 // 定义5秒超时
})
// request interceptor
service.interceptors.request.use(
  config => {
    // 如果token存在 注入token
    if (store.getters.token) {
      config.headers['Authorization'] = `Bearer ${store.getters.token}`
    }
    return config
  },
  error => {
    // do something with request error
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  // 成功的请求:如果状态码在200-300之间
  response => {
    // 从axios的data中解构出来必要的字段
    const { success, message } = response.data
    // 如果success为true,直接返回data即可
    if (success) {
      return response.data
    } else {
      // 如果success为false 业务出错,直接触发reject 被catch分支捕获
      return Promise.reject(new Error(message))
    }
  },
  // 失败的请求:如果状态码不在200-300之间
  async error => {
    // console.dir(error);
    if (error.response.status === 401) {
      await store.dispatch('user/logout')
      // vue拿到的routrer.currentpath.fullpath是正常的,但是js文件在hash模式下会出错,所以使用window.location.hash
      let path = window.location.hash.slice(1)
      // resetRouter()
      router.replace({
        path: `/login`,
        query: {
          redirect: path
        }
      })
      Message({
        message: '请重新登录',
        type: 'error',
        duration: 1000
      })
    }

    return Promise.reject(error)
  }
)

export default service
